home *** CD-ROM | disk | FTP | other *** search
/ Revista CD Expert 8 / Revista CD Expert nº 08 CD1.iso / Utilitarios / Programacao / Pacific C for DOS / EXAMPLES / MOUSEX.C < prev    next >
C/C++ Source or Header  |  1995-03-08  |  2KB  |  75 lines

  1. /*
  2.  *    Pacific C mouse driver example code.
  3.  *    Enables the mouse, then displays mouse position and
  4.  *    button status every time the user presses or releases
  5.  *    a button, until the user presses a key.
  6.  */
  7.  
  8. #include    <stdio.h>
  9. #include    <conio.h>
  10. #include    <stdlib.h>
  11. #include    "mouse.h"
  12.  
  13. volatile int    buttons, x, y, got_event;
  14.  
  15. /*
  16.  *    Mouse event handler.  This is directly called by the
  17.  *    mouse driver when a mouse event happens.  Note that
  18.  *    got_event, buttons, x and y need to be volatile because
  19.  *    they are accessed asynchronously by an event handler and
  20.  *    the main program.
  21.  *
  22.  *    WARNING!  Do not try doing complex things like printf()
  23.  *    calls in a handler installed by event_handler().
  24.  */
  25.  
  26. void
  27. mouse_event(struct mousedata * mouse)
  28. {
  29.     if (got_event == 0) {
  30.         buttons = mouse->buttons;
  31.         x = mouse->x;
  32.         y = mouse->y;
  33.         got_event = 1;
  34.     }
  35. }
  36.  
  37. /*
  38.  *    Main program - installs mouse_event() to handle
  39.  *    mouse events asynchronously, then polls the
  40.  *    flags set by mouse_event() when something happens.
  41.  *    This allows the user code to do other things while
  42.  *    waiting for the mouse state to change.
  43.  *
  44.  *    Try making the first parameter to eventhandler()
  45.  *    CURSOR_MOVED | BUTTON_PRESS | BUTTON_RELEASE
  46.  */
  47.  
  48. main()
  49. {
  50.     buttons = initmouse();    /* try to initialize mouse */
  51.     if (buttons == -1) {
  52.         printf("Mouse not present\n");
  53.         exit(0);
  54.     } else {
  55.         printf("%d button mouse found\n", buttons);
  56.     }
  57.     showcursor();        /* turn on mouse cursor */
  58.     got_event = 0;
  59.     eventhandler(BUTTON_PRESS | BUTTON_RELEASE, mouse_event);
  60.     while (!kbhit()) {
  61.         if (got_event != 0) {
  62.             hidecursor();
  63.             printf("X = %3d  Y = %3d  %s  %s  %s\n", x, y,
  64.                 (buttons & LEFT_FLAG)?   "left"   : "",
  65.                 (buttons & MIDDLE_FLAG)? "middle" : "",
  66.                 (buttons & RIGHT_FLAG)?  "right"  : "");
  67.             showcursor();
  68.             got_event = 0;
  69.         }
  70.     }
  71.     getch();        /* clear keystroke */
  72.     hidecursor();        /* turn of mouse cursor */
  73.     shutdownmouse();
  74. }
  75.